[iOS] Google Driveのファイル一覧を取得する
はじめに
こんにちは。CX事業本部の平屋です。
本記事では、Google Driveのファイル一覧を取得する実装を紹介します。
検証環境
- macOS Mojave 10.15.3
- Xcode Version 11.3.1
Googleログインを追加する
Googleログインをアプリに追加します。追加方法については以下の記事で解説しています。
Google Drive API SDKを追加する
Google Drive APIのSDKをアプリに追加します。
ここでは、CocoaPodsを使用してインストールします。Podfileに以下のpodを追加し、pod install
を実行します。
pod 'GoogleAPIClientForREST/Drive'
インストールが完了したら、*.xcworkspaceファイルを開きます。
ファイル一覧を取得する
import UIKit import GoogleSignIn import GoogleAPIClientForREST import GTMSessionFetcher class ViewController: UITableViewController { // (1) GTLRDriveServiceを作成する let googleDriveService = GTLRDriveService() // (2) GIDGoogleUserを準備しておく var googleUser: GIDGoogleUser? override func viewDidLoad() { super.viewDidLoad() getFiles() } func getFiles() { guard let user = googleUser else { return } // (3) authorizerを設定 googleDriveService.authorizer = user.authentication.fetcherAuthorizer() // (4) queryを作成する let query = GTLRDriveQuery_FilesList.query() // (5) パラメータを設定する // (5-1) ルートディレクトリ直下のファイル/フォルダを取得対象にする (ルートディレクトリ以外を指定する場合は、rootではなく対象ディレクトリのIDを指定する) query.q = "'root' in parents" // (5-2) ドライブのファイルを取得対象にする (指定可能な値: drive, appDataFolder, photosが指定可能) query.spaces = "drive" // (5-3) 所有しているファイル(または他ユーザーから共有されたファイル)を取得対象にする (指定可能な値: user, domain, drive, allDrivesが指定可能) query.corpora = "user" // (5-4) ソート方法を指定する (指定可能な値: createdTime, folder, modifiedByMeTime, modifiedTime, name, name_natural, quotaBytesUsed, recency, sharedWithMeTime, starred, and 'viewedByMeTime) query.orderBy = "folder,name" // (6) クエリを実行する googleDriveService.executeQuery(query) { (_, result, error) in if let error = error { print(error.localizedDescription) return } // (7) ファイル一覧を使用する let folderList = result as! GTLRDrive_FileList guard let files = folderList.files else { return } for file in files { print("file.name: \(file.name ?? ""), file.mimeType: \(file.mimeType ?? ""), file.fileExtension: \(file.fileExtension ?? "")") } } } }
(1) GTLRDriveServiceを作成する
GTLRDriveService
を生成します。このクラスにクエリを与えることによってファイル一覧の取得などを行うことができます。
(2) GIDGoogleUserを取得しておく
GIDGoogleUser
はGoogleログインの結果得られます。ログインしているユーザーの情報を保持します。GIDGoogleUser
がもつ情報をGTLRDriveService
に適用することで、そのユーザーに関するファイルに対して操作を行えるようになります。
(3) authorizerを設定する
GIDGoogleUser
のauthentication
のfetcherAuthorizer()
を使ってGTMFetcherAuthorizationProtocol
に適合したオブジェクトを取得し、GTLRDriveService
のauthorizer
にセットします。Authenticationヘッダ付きでリクエストを実行できるようになります。
(4) queryを作成する
ファイル一覧取得用のクエリGTLRDriveQuery_FilesList
を作成します。Web API的には以下のAPIがこのクエリに対応します。
(5) パラメータを設定する
取得対象やソートに関するパラメータを設定します。設定できる内容は以下のページに記載されています。
- Files: list | Google Drive API | Google Developers
- Search for files and folders | Google Drive API | Google Developers
(6) クエリを実行する
GTLRDriveService
を使用して作成したクエリを実行します。
(7) ファイル一覧を使用する
取得成功すると、ファイルの一覧情報を保持するGTLRDrive_FileList
を取得できます。各ファイルの情報を得るにはfiles
プロパティを使用します。
さいごに
本記事では、Google Driveのファイル一覧を取得する実装を紹介しました。
次の記事ではGoogle Deiveの他のAPIで使用する例を扱う予定です。